package dao;

import hibernate.HibernateUtil;

import java.util.List;

import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import entities.*;

public class HibernateRodamientoBeanDAO 
{
	private static HibernateRodamientoBeanDAO instancia = null;
	private static SessionFactory sf = null;

	public static HibernateRodamientoBeanDAO getInstancia()
	{
		if(instancia == null)
		{
			sf = HibernateUtil.getSessionFactory();
			instancia = new HibernateRodamientoBeanDAO();
		} 
		return instancia;
	}
	
	public void grabarRodamientos(List<RodamientoEntity> rodamientos)
	{
		Session session = sf.openSession();
		session.beginTransaction();
		for(RodamientoEntity rodamiento:rodamientos)
		{
			session.persist(rodamiento);
		}
		session.flush();
		session.getTransaction().commit();
		session.close();
	}
	
	public void grabarRodamiento( RodamientoEntity rodamiento )
	{
		Session session = sf.openSession();
		session.beginTransaction();
		
		session.persist(rodamiento);
		
		session.flush();
		session.getTransaction().commit();
		session.close();
	}
	
	public void eliminarRodamiento( RodamientoEntity rodamiento )
	{
		Session session = sf.openSession();
		session.beginTransaction();
		
		session.delete(rodamiento);
		
		session.flush();
		session.getTransaction().commit();
		session.close();
	}
	
	public void modificarRodamiento( RodamientoEntity rodamiento )
	{
		Session session = sf.openSession();
		session.beginTransaction();
		
		session.update(rodamiento);
		
		session.flush();
		session.getTransaction().commit();
		session.close();
	}
	
	@SuppressWarnings("unchecked")
	public int obtenerStockRodamiento( String codSKF )
	{	
		Session session = sf.openSession();
		
		Query query = session.createQuery( "from RodamientoBean rod where rod.codigoSkf = :codSkf" )
		.setString("codSkf", codSKF);
		List<RodamientoEntity> rodamiento = query.list();
			
		return rodamiento.get(0).getCantStock();
	}
	
	@SuppressWarnings("unchecked")
	public List<RodamientoEntity> buscarEquivalentes( RodamientoEntity r )
	{	
		Session session = sf.openSession();
		
		Query query = session.createQuery( "from RodamientoBean rod where rod.codigoSkf = :codSkf" )
		.setString("codSkf", r.getCodigoSkf());
		List<RodamientoEntity> equivalentes = query.list();
		
		return equivalentes;
	}
	
	@SuppressWarnings("unchecked")
	public RodamientoEntity obtenerRodamientoPorCodigoSKF( String codigoSKF )
	{
		Session session = sf.openSession();
		
		Query query = session.createQuery( "from RodamientoBean rod where rod.codigoSkf = :codSkf" )
		.setString("codSkf", codigoSKF);
		
		List<RodamientoEntity> rodamientos = query.list();
		
		return rodamientos.get(0);
	}
}
